class MyPageHeader extends BaseEditMaster {
    constructor(dataId, currentTaskPrivileges, nextTaskPrivileges, pageStatus, pageListData,
            returnUrl, fetchDataUrl, saveUrl, exportUrl, printUrl) {
        super(dataId, currentTaskPrivileges, nextTaskPrivileges, pageStatus, pageListData,
                returnUrl, fetchDataUrl, saveUrl, exportUrl, printUrl);
    }
    // 得到主表数据
    GetEntityData() {
        let item = {};
        item['headerId'] = $("#HeaderId").val();
        item['billNo'] = $.trim($("#BillNo").val());                    //
        item['bomHeaderId'] = $("#BomHeaderId").val();                  // 如果引用了单耗，此处有值，否则为0       
        item['styleNo'] = formatNullInputValue($.trim($("#StyleNo").val()).toUpperCase());        // 款号（）
        item['productName'] = formatNullInputValue($.trim($("#ProductName").val()));              // 品名
        item['customerName'] = formatNullInputValue($.trim($("#CustomerName").val()));            // 客户名
        item['designedBy'] = $.trim($("#UserId").val());
        item['perColourQuantity'] = formatNullInputValue($.trim($("#PerColourQuantity").val()));  // 每色数量
        item['totalQuantity'] = formatNullInputValue($.trim($("#TotalQuantity").val()));          // 总数量
        item['description'] = formatNullInputValue($.trim($("#Description").val()));              // 备注
        item['lastFlag'] = $("#LastFlag").is(":checked") ? 1 : 0;                                 // 最终预测标记
        item['createdBy'] = $.trim($("#UserId").val());
        item['updatedBy'] = $.trim($("#UserId").val());
        item['workFlowId'] = $.trim($("#WorkFlowId").val());
        return JSON.stringify(item);
    }
    FillData(data) {
        let item = data.HeaderEntity;
        $("#HeaderId").val(item.headerId);
        $("#BillNo").val(formatNullData(item.billNo));
        $("#StyleNo").val(item.styleNo);
        $("#ProductName").val(item.productName);
        $("#CustomerName").val(item.customerName);
        //      $("#DesignedBy").val(item.designedBy);
        //      $("#DesignedByName").val(item.designedByName);
        $("#PerColourQuantity").val(item.perColourQuantity);
        $("#TotalQuantity").val(item.totalQuantity);
        $("#TotalAmount").val(item.totalAmount);
        $("#UpdatedByName").val(item.updatedByName);
        $("#UpdatedDate").val(formatNullData(item.updatedDate));
        $("#Description").val(item.description);
        $("#CheckedByName").val(item.checkedByName);           //
        $("#CheckedDate").val(item.checkedDate);
        if (item.lastFlag === true) {
            $("#LastFlag").prop("checked", true);
        } else {
            $("#LastFlag").prop("checked", false);
        }

        // 显示明细数据
        _InstancePageLines.BuildDataTable(data.LinesList);

        // 编辑状态时不允许更改款号
        $("#ChoiceStyleNo").attr("onclick", "");

        // 显示图片
        $("#ProductPictureList").empty();
        let _picList = data.PictureList;
        if (_picList.length > 0) {
            let content = '';
            for (let i = 0; i < _picList.length; i++) {
                content += '<li id="' + _picList[i].linesId + '" imageFileDir="' + _picList[i].imageFileDir + '" imageFileName="' + _picList[i].imageFileName + '">';
                content += '<img src="' + $("#PictureUrl").val() + "/" + _picList[i].imageUrl + '" alt="产品图片" style="max-width:142px; max-height:110px;" />';
                content += '</li>';
                $("#ProductPictureList").append(content);
                content = '';
            }
            _InstancePagePicture.OnClickPicture();
        }

        this.currentTaskPrivileges = item.currentTaskPrivileges;
        this.nextTaskPrivileges = item.nextTaskPrivileges;
        this.unCheckFlag = item.unCheckFlag;
        this.SetPageElementStatus(this.HidePageElement, this.ShowPageElement, function () {
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });
        $("#BillNo").focus();
    }
    Save() {
        // 如果有主表ID，则编辑否则新增
        if (parseInt($("#HeaderId").val()) === 0) {
            this.saveUrl = "/tech/cost_forecast/header/insert.html";
        } else {
            this.saveUrl = "/tech/cost_forecast/header/update.html";
        }
        super.Save((data, _this) => {
            if (data !== {}) {
                if (parseInt(_this.pageStatus) === 1) {
                    _this.FillData(data);
                    _this.dataId = data.HeaderEntity.headerId;
                    $("#Action").val(2);
                    _this.pageStatus = 2;

                    $("#panelSlave").show();
                    _InstancePageLines.AutoAdjustTableHeightForLines();
                }
            }
        });
    }
    New() {
        super.New();
        $("#HeaderId").val(0);
        $("#ButSave").show();
        $("#panelSlave").hide();
        // 新增状态时允许更改款号
        let _event_onclick = '_InstancePageHeader.DoChoiceStyleNo()';
        $("#ChoiceStyleNo").attr("onclick", _event_onclick);

        // 默认设置一些值
        //$("#DesignedBy").val($.trim($("#UserId").val()));  // 设计者默认为登录者
        //$("#DesignedByName").val($("#UserName").val());
        $("#DateOfFilling").val(getCurrentDate());
        $("#UpdatedDate").val(getCurrentDate());
        $("#UpdatedByName").val($("#UserName").val());
        $("#StyleNo").empty();
        $('#tabData11 tbody').empty();
        $('#tabData12 tbody').empty();
        _InstancePageLines.rows = 0;
        //自适应高度
        _InstancePageLines.AutoAdjustTableHeightForLines();

        this.FetchNewBillNo();   // 设置新的单据号
        $("#BillNo").focus();
    }
    //自动生成单号
    FetchNewBillNo() {
        super.DoAjax({}, "/tech/cost_forecast/header/fetchNewBillNo.html", (data, _this) => {
            $("#BillNo").val(data.BillNo);
        });
    }
    DoChoiceStyleNo() {
        let _choice = new CommonChoice();
        _choice.DoChoiceBomLines(0, 0, '选择款号', (data) => {
            if (data) {
                // 判断是否数据发生了改变如果改变则设置改变标记
                if ($("#StyleNo").val() !== data[1]) {
                    $("#form_data").data("changed", true);
                }
                $("#BomHeaderId").val(data[0]);
                $("#StyleNo").val(data[1]);
                $("#ProductName").val(data[2]);
                $("#ProductId").val(data[4]);
                $("#CustomerName").val(data[3]);
                $("#Description").val("预测用单耗表：" + data[5]);
            }
        });
        $("#StyleNo").focus();
    }
    DoPrintPreview() {
        window.open(parent.basePath + "/printPreview/tech/cost_forecast/printPreview1.html?id=" + $("#HeaderId").val());
    }
    Expand() {
        super.Expand(function () {
            // 自适应高度
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });
    }
    /* 折叠 */
    Collapse() {
        super.Collapse(function () {
            // 自适应高度
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });
    }
    ShowPageElement() {
        $("Button.act__save").show();
        if (!$("span.act__delete").hasClass("act__delete")) {
            $("span.act__delete").addClass("trash");
            $("span.act__delete i").addClass("fa-all fa-trash-o fa-1");
        }
        $("#remark").show();
    }
    HidePageElement() {
        /*
         $("Button.act__save").hide();
         $("span.act__delete").removeClass("trash");
         $("span.act__delete i").removeClass("fa-all fa-trash-o fa-1");
         $("#remark").hide();*/
    }
    /* SetLastFlag() {
     let _params = {};
     _params['HeaderId'] = parseInt($("#HeaderId").val());
     _params['LastFlag'] = $("#LastFlag").is(":checked") ? "1" : "0";  // 完成标记
     this.DoAjax(_params, "/trade/cost_forecast/setLastFlag.html", function () {
     ShowSuccessMessagePanel("状态设置成功。");
     });
     }*/
}

class MyPageLines extends BaseEditSlave {
    constructor() {
        super('', '', '');
        this.$input = null;
        this.clipboard = []; // 剪切板
    }
    BuildDataTable(result) {
        $('#tabData11 tbody').empty();
        $('#tabData12 tbody').empty();
        // 得到数据列表
        if (result === null || result.length === 0) {
            $('#loading').hide();
            this.rows = 0;
            // 自适应高度
            this.AutoAdjustTableHeightForLines();
            return false;
        }
        let content01 = '';
        let content02 = '';
        this.rows = result.length;
        this.numCheckbox = result.length;
        for (let i = 0; i < result.length; i++) {
            let id = result[i].linesId;
            //正常行
            // rowFlag用于区分行属性,0：材料行 1:包装费 5：加工费  2：国内合计 3：国外合计 4：材料总计 6：成本合计
            if (result[i].rowFlag === 0) {
                content01 += '<tr row_flag="0" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td><label style="margin-left:3px;" class="btn" for="R-' + id + '"><input id="R-' + id + '" name="_check_row" type="checkbox" onclick="_InstancePageLines.DoCheckRow($(this),\'_check_row\', $(\'#CheckAll\'));" value="' + id + '"/><i></i><span></span></label></td>';
                // 删除权限判断
                if ($("#ActionAcl_4").length === 0 || parseInt($("#ActionAcl_4").val() === 0)) {
                    content01 += '<td></td>';
                } else {
                    content01 += '<td class="column__action"><span title="删除" class="trash act__delete" onclick="_InstancePageLines.DoDeleteLines($(this));"><i class="fa-all fa-trash-o fa-1"></i></span></td>';
                }
                content01 += '<td style="text-align:center;">' + formatNullData(result[i].orderNo) + '</td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td>' + formatNullData(result[i].supplierName) + '</td>';
                content01 += '<td class="edited-cell">' + formatNullData(result[i].partOfNeed) + '</td>';
                content01 += '<td class="edited-cell">' + formatNullData(result[i].materialCode) + '</td>';
                content01 += '<td>' + formatNullData(result[i].specification) + '</td>';
                content01 += '<td style="text-align:center;" _mash_uom_id="' + result[i].uomId + '">' + formatNullData(result[i].uomName) + '</td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="0">';
                //     content02 += '<td class="edited-cell" style="text-align:center;" _mash_type_id="' + result[i].materialPreparedTypeId + '">' + formatNullData(result[i].materialPreparedTypeName) + '</td>';    // 物料来源
                content02 += '<td class="edited-cell">' + formatNullData(result[i].pieceYardage) + '</td>';      // 单耗
                content02 += '<td class="edited-cell">' + formatNullData(result[i].unitPrice) + '</td>';         // 单价
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';                          // 单位成本1
                content02 += '<td class="edited-cell">' + formatNullData(result[i].lossRatio) + '</td>';         // 材料损耗比例
                content02 += '<td>' + formatNullData(result[i].lossQuantity) + '</td>';                          // 材料损耗数量
                content02 += '<td class="edited-cell">' + formatNullData(result[i].poAllowanceRatio) + '</td>';  // 采购允差比例
                content02 += '<td>' + formatNullData(result[i].poAllowanceQuantity) + '</td>';                   // 采购允差数量
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Quantity) + '</td>';                  // 
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount.toFixed(3)) + '</td>';         // 
                content02 += '<td class="edited-cell">' + formatNullData(result[i].moqLevel) + '</td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossQuantity) + '</td>';                // 
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount.toFixed(3)) + '</td>';       // 
                content02 += '<td>' + formatNullData(result[i].otherFee1.toFixed(3)) + '</td>';                  // 
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Quantity) + '</td>';                  // 
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount.toFixed(3)) + '</td>';         // 
                content02 += '<td>' + formatNullData(result[i].moqLossQuantity) + '</td>';                       // 
                content02 += '<td>' + formatNullData(result[i].moqLossAmount.toFixed(3)) + '</td>';              // 
                content02 += '<td class="edited-cell">' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount.toFixed(3)) + '</td>';            // 
                content02 += '<td class="edited-cell">' + formatNullData(result[i].description) + '</td>';       // 备注
                content02 += '</tr>';
            }
            // 国内合计行
            if (result[i].rowFlag === 2) {
                content01 += '<tr row_flag="2" class="fix__row" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="2">';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].moqLossAmount) + '</td>';
                content02 += '<td></td>';
                //content02 += '<td class="edited-cell">' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount) + '</td>';
                content02 += '<td></td>';
                content02 += '</tr>';
            }
            // 国外合计行
            if (result[i].rowFlag === 3) {
                content01 += '<tr class="fix__row" row_flag="3" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="3">';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].moqLossAmount.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                //content02 += '<td class="edited-cell">' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount.toFixed(2)) + '</td>';
                content02 += '<td></td>';
                content02 += '</tr>';
            }
            // 单位材料总计
            if (result[i].rowFlag === 4) {
                content01 += '<tr class="fix__row" row_flag="4" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="4">';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].moqLossAmount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount) + '</td>';
                content02 += '<td></td>';
                content02 += '</tr>';
            }
            // 单位成本合计
            if (result[i].rowFlag === 6) {
                content01 += '<tr class="fix__row" row_flag="6" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="6">';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount) + '</td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '<td></td>';
                content02 += '</tr>';
            }
            // 包装费
            if (result[i].rowFlag === 1) {
                content01 += '<tr class="fix__row" row_flag="1" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td>' + formatNullData(result[i].supplierName) + '</td>';
                content01 += '<td >' + formatNullData(result[i].partOfNeed) + '</td>';
                content01 += '<td>' + formatNullData(result[i].materialCode) + '</td>';
                content01 += '<td>' + formatNullData(result[i].specification) + '</td>';
                content01 += '<td>' + formatNullData(result[i].uomName) + '</td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="1">';
                content02 += '<td class="edited-cell">' + formatNullData(result[i].pieceYardage) + '</td>';
                content02 += '<td class="edited-cell">' + formatNullData(result[i].unitPrice) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';
                content02 += '<td class="edited-cell">' + formatNullData(result[i].lossRatio) + '</td>';
                content02 += '<td>' + formatNullData(result[i].lossQuantity) + '</td>';
                content02 += '<td class="edited-cell">' + formatNullData(result[i].poAllowanceRatio) + '</td>';
                content02 += '<td>' + formatNullData(result[i].poAllowanceQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Quantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount) + '</td>';
                content02 += '<td class="edited-cell">' + formatNullData(result[i].moqLevel) + '</td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].otherFee1) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Quantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].moqLossQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].moqLossAmount) + '</td>';
                content02 += '<td >' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount) + '</td>';
                content02 += '<td >' + formatNullData(result[i].description) + '</td>';
                content02 += '</tr>';
            }
            // 加工费
            if (result[i].rowFlag === 5) {
                content01 += '<tr class="fix__row" row_flag="5" _mash_quoted="0" _mash_id="' + id + '" _mash_material_id="' + result[i].materialId + '">';
                content01 += '<td></td>';
                content01 += '<td></td>';
                content01 += '<td style="text-align:center;"></td>';
                content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
                content01 += '<td>' + formatNullData(result[i].supplierName) + '</td>';
                content01 += '<td >' + formatNullData(result[i].partOfNeed) + '</td>';
                content01 += '<td>' + formatNullData(result[i].materialCode) + '</td>';
                content01 += '<td>' + formatNullData(result[i].specification) + '</td>';
                content01 += '<td>' + formatNullData(result[i].uomName) + '</td>';
                content01 += '</tr>';

                content02 += '<tr row_flag="5">';
                content02 += '<td >' + formatNullData(result[i].pieceYardage) + '</td>';
                content02 += '<td >' + formatNullData(result[i].unitPrice) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit1) + '</td>';
                content02 += '<td >' + formatNullData(result[i].lossRatio) + '</td>';
                content02 += '<td>' + formatNullData(result[i].lossQuantity) + '</td>';
                content02 += '<td >' + formatNullData(result[i].poAllowanceRatio) + '</td>';
                content02 += '<td>' + formatNullData(result[i].poAllowanceQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Quantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit2Amount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].moqLevel) + '</td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].perUnitMoqLossAmount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].otherFee1) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Quantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].costPerUnit3Amount) + '</td>';
                content02 += '<td>' + formatNullData(result[i].moqLossQuantity) + '</td>';
                content02 += '<td>' + formatNullData(result[i].moqLossAmount) + '</td>';
                content02 += '<td >' + formatNullData(result[i].otherFee2) + '</td>';
                content02 += '<td>' + formatNullData(result[i].totalLossAmount) + '</td>';
                content02 += '<td >' + formatNullData(result[i].description) + '</td>';
                content02 += '</tr>';
            }
            $('#tabData11 tbody').append(content01);
            $('#tabData12 tbody').append(content02);
            content01 = '';
            content02 = '';
        }

        setTwoTableRowColor("tabData11", "tabData12");
        $("#CheckAll").prop("checked", false);

        // 设置明细部分高度
        this.AutoAdjustTableHeightForLines();

        let cell_id = "_cell__field";
        let cell_name = "__cell__field";
        let _this = this;
        $('#tabData11 tbody tr').find("td.edited-cell").click(function () {
            switch ($(this).index()) {
                case 6:
                    //    OnCellPopupEditEvent($(this), cell_id, cell_name, ($input) => {
                    //       _this.DoUpdateRowByMaterialCode($input);
                    //    });
                    $(this).attr("_old_val", $(this).text());
                    OnCellClickEvent($(this), cell_id, cell_name, 0);
                    break;
                default:
                    OnCellClickEvent($(this), cell_id, cell_name, 0);
                    break;
            }
        });
        let _index = $('#tabData12 tbody tr').find('td:last').index() - 1;
        $('#tabData12 tbody tr').find("td.edited-cell").click(function () {
            switch ($(this).index()) {
                case 0:
                    OnCellClickEvent($(this), cell_id, cell_name, 0, ($input) => {
                        _this.SetPieceYeard($(this));
                    });
                    break;
                case 1:
                    OnCellClickEvent($(this), cell_id, cell_name, 0, ($input) => {
                        _this.SetUnitPrice($(this));
                    });
                    break;
                    //      case _index:
                    //           OnCellPopupEditEvent($(this), cell_id, cell_name, ($input) => {
                    //              _this.DoChoiceMaterialPreParedType($input);
                    //          });
                    //         break;
                default:
                    OnCellClickEvent($(this), cell_id, cell_name, 0);
                    break;
            }
        });

        // 拖动表格行改变显示顺序
        $("#tabData11 tbody").wxdragsort({
            dragWrapper: $("#tabLinesList"),
            placeHolderWrapper: $("#tabLinesList"),
            parentobj: $("#tabLinesList"),
            syncobj: "tabData12",
            dragColumnIndex: 2,
            dragEnd: () => {
                this.UpdateLinesOrder();
            }
        });

        $("#loading").hide();
    }
    // 单耗改变后，其他相关数据随着改变
    SetPieceYeard($td) {
        let _unitprice = parseFloat($.trim($td.parent().find('td').eq(1).text()) === '' ? 0 : $.trim($td.parent().find('td').eq(1).text()));
        let _pieceyeard = $.trim($td.children("input").val()) === "" ? 0 : parseFloat($.trim($td.children("input").val()));
        let _loss_ratio = $.trim($td.parent().find('td').eq(3).text()) === "" ? 0 : parseFloat($.trim($td.parent().find('td').eq(3).text()));
        let _po_allowance_ratio = $.trim($td.parent().find('td').eq(5).text()) === "" ? 0 : parseFloat($.trim($td.parent().find('td').eq(5).text()));

        $td.parent().find('td').eq(2).text((_pieceyeard * _unitprice).toFixed(3));
        $td.parent().find('td').eq(4).text((_pieceyeard * _loss_ratio).toFixed(4));
        $td.parent().find('td').eq(6).text((_po_allowance_ratio * (_pieceyeard + _pieceyeard * _loss_ratio)).toFixed(4));
        $td.parent().find('td').eq(7).text((_pieceyeard + (_pieceyeard * _loss_ratio) + _po_allowance_ratio * (_pieceyeard + _pieceyeard * _loss_ratio)).toFixed(4));
        $td.parent().find('td').eq(8).text((_unitprice * (_pieceyeard + (_pieceyeard * _loss_ratio) + _po_allowance_ratio * (_pieceyeard + _pieceyeard * _loss_ratio))).toFixed(3));

        this.SetOtherCellData($td.parent(), _pieceyeard, _unitprice);
    }
    // 单价改变后，其他相关数据随着改变
    SetUnitPrice($td) {
        let _pieceyeard = parseFloat($.trim($td.parent().find('td').eq(0).text()) === '' ? 0 : $.trim($td.parent().find('td').eq(0).text()));
        let _unitprice = $.trim($td.children("input").val()) === "" ? 0 : parseFloat($.trim($td.children("input").val()));
        let _costPerUnit2Quantity = parseFloat($.trim($td.parent().find('td').eq(7).text()) === "" ? 0 : parseFloat($.trim($td.parent().find('td').eq(7).text())));

        $td.parent().find('td').eq(2).text((_pieceyeard * _unitprice).toFixed(3));
        $td.parent().find('td').eq(8).text((_unitprice * _costPerUnit2Quantity).toFixed(3));

        this.SetOtherCellData($td.parent(), _pieceyeard, _unitprice);
    }
    SetOtherCellData($tr, _pieceyeard, _unitprice) {
        let _costPerUnit2Quantity = parseFloat($.trim($tr.find('td').eq(7).text()) === '' ? 0 : $.trim($tr.find('td').eq(7).text()));  // 单位成本2数量
        let _moqLevel = parseFloat($.trim($tr.find('td').eq(9).text()) === '' ? 0 : $.trim($tr.find('td').eq(9).text()));     // 起订量标准
        let _otherFee2 = parseFloat($.trim($tr.find('td').eq(17).text()) === '' ? 0 : $.trim($tr.find('td').eq(17).text()));  // 其他费用2
        let _moqLossQuantity = _moqLevel - _costPerUnit2Quantity * parseInt($("#PerColourQuantity").val());                   // 起订量损失数量
        _moqLossQuantity = _moqLossQuantity > 0 ? _moqLossQuantity : 0;
        let _perUnitMoqLossQuantity = _moqLossQuantity / parseInt($("#PerColourQuantity").val());                             // 单位起订量损失数量
        $tr.find('td').eq(10).text(_perUnitMoqLossQuantity.toFixed(2));
        $tr.find('td').eq(11).text((_unitprice * _perUnitMoqLossQuantity).toFixed(3));                                        // 单位起订量损失金额
        $tr.find('td').eq(12).text((_otherFee2 / parseInt($("#PerColourQuantity").val())).toFixed(3));                        // 其他费用1
        $tr.find('td').eq(13).text((_costPerUnit2Quantity + _perUnitMoqLossQuantity).toFixed(3));                             // 单位成本3数量
        $tr.find('td').eq(14).text(((_costPerUnit2Quantity + _perUnitMoqLossQuantity) * _unitprice + _otherFee2 / parseInt($("#PerColourQuantity").val())).toFixed(3));  // 单位成本3金额
        $tr.find('td').eq(15).text(_moqLossQuantity.toFixed(2));                                                              // 起订量损失数量
        $tr.find('td').eq(16).text((_moqLossQuantity * _unitprice).toFixed(3));                                               // 起订量损失金额
        $tr.find('td').eq(18).text((_otherFee2 + _moqLossQuantity * _unitprice).toFixed(3));                                  // 总损失金额

        // 设置单位成本1国内成本总计
        let _totalCostPerUnit1 = 0;
        $("#tabData12 tbody tr[row_flag='0']").each(function (index) {
            let _dl = parseFloat($.trim($(this).find('td').eq(0).text()) === '' ? _pieceyeard : $.trim($(this).find('td').eq(0).text()));
            let _dj = parseFloat($.trim($(this).find('td').eq(1).text()) === '' ? _unitprice : $.trim($(this).find('td').eq(1).text()));
            _totalCostPerUnit1 = _totalCostPerUnit1 + (_dl * _dj);
        });
        $("#tabData12 tbody tr[row_flag='2']").eq(0).find("td").eq(2).text(_totalCostPerUnit1.toFixed(2));
    }
    // 拖动改变序号
    UpdateLinesOrder() {
        // 第一步，根据当前顺序，重新设置行号
        $("#tabData11 tbody").find("tr").each(function (index) {
            if ($(this).hasClass("fix__row")) {

            } else {
                $(this).find("td").eq(2).html(index + 1);
            }
        });

        // 第二步，同步到后台数据库
        let itemList = [];
        $('#tabData11 tbody').find("tr").each(function (index) {
            if ($(this).hasClass("fix__row") === false) {
                let _orderNo = $.trim($(this).find('td').eq(2).text());   // 顺序号
                let item = {};
                item['headerId'] = $("#HeaderId").val();
                item['linesId'] = $.trim($(this).attr("_mash_id"));
                item['orderNo'] = parseInt(_orderNo);
                itemList.push(item);
            }
        });

        // 更新后台对应的序号
        super.DoAjax(itemList, "/tech/cost_forecast/lines/updateLinesOrder.html", function (data, _this) {
            if (data.LinesList !== undefined) {
                // 刷新明细
                _this.BuildDataTable(data.LinesList);
            }
            ShowSuccessMessagePanel("改变顺序完成。");
        });
    }
    // 得到要保存的数据
    GetLinesData() {
        let jsonResult = [];
        // 得到修改过数据
        $('#tabData12 tbody').find("tr").each(function (index) {
            let $tr2 = $(this);
            let $tr1 = $('#tabData11 tbody').find("tr").eq(index);
            if ($tr2.find("td.dirty").length || $tr1.find("td.dirty").length) {
                let item = {};
                item['headerId'] = $("#HeaderId").val();
                item['linesId'] = $tr1.attr("_mash_id");
                item['materialId'] = $tr1.attr("_mash_material_id");
                //    item['quotedFlag'] = parseInt($tr1.attr("_mash_quoted"));
                //    item['orderNo'] = formatNullInputValue($.trim($tr1.find('td').eq(2).text())) === null ? 0 : $.trim($tr1.find('td').eq(2).text());         // 顺序
                item['partOfNeed'] = formatNullInputValue($.trim($tr1.find('td').eq(5).text())) === null ? '' : $.trim($tr1.find('td').eq(5).text());     // 使用部位                
                item['materialCode'] = formatNullInputValue($.trim($tr1.find('td').eq(6).text()));             // 料号               
                //     item['specification'] = formatNullInputValue($.trim($tr1.find('td').eq(7).text()));            // 规格                               
                item['pieceYardage'] = $.trim($tr2.find('td').eq(0).text()) === '' ? 0 : $.trim($tr2.find('td').eq(0).text());
                item['unitPrice'] = $.trim($tr2.find('td').eq(1).text()) === '' ? 0 : $.trim($tr2.find('td').eq(1).text());
                item['lossRatio'] = $.trim($tr2.find('td').eq(3).text()) === '' ? 0 : $.trim($tr2.find('td').eq(3).text());
                item['poAllowanceRatio'] = $.trim($tr2.find('td').eq(5).text()) === '' ? 0 : $.trim($tr2.find('td').eq(5).text());
                item['moqLevel'] = $.trim($tr2.find('td').eq(9).text()) === '' ? 0 : $.trim($tr2.find('td').eq(9).text());
                item['otherFee2'] = $.trim($tr2.find('td').eq(17).text()) === '' ? 0 : $.trim($tr2.find('td').eq(17).text());

                //item['uomId'] = formatNullInputValue($.trim($tr2.find('td').eq(3).attr("_mash_uom_id")));   // 计量单位
                //   if ($tr2.find('td:last').prev().hasClass("dirty")) {
                //      item['materialPreparedTypeId'] = $.trim($tr2.find('td:last').prev().attr("_mash_type_id"));   // 备料来源ID
                //   }
                //    item['description'] = formatNullInputValue($.trim($tr2.find('td').last().text()));                // 备注
                item['updatedBy'] = $("#UserId").val();
                item['perColourQuantity'] = $("#PerColourQuantity").val();   //更新时计算用
                jsonResult.push(item);
            }
        });
        return JSON.stringify(jsonResult);
    }
    SaveLines() {
        if ($('#tabData11 tbody tr').find("td").eq(6).hasClass("dirty")) {
            showModal(350, 140, '确认删除', '', null, null, 1, '请问，确定要改变当前材料吗？', () => {
                this.OnSaveLines();
            }, () => {
                return false;
            });
        } else {
            this.OnSaveLines();
        }
    }
    OnSaveLines() {
        //step 1、进行页面验证，失败则返回
        let success_01 = CheckGridInput();
        if (!success_01)
            return;

        super.SaveLines("/tech/cost_forecast/lines/update.html", function (data, _this) {
            if (data.Success === undefined) {
                ShowSuccessMessagePanel("保存成功。");
            } else {
                if (data.Success) {
                    // 刷新明细
                    _this.BuildDataTable(data.LinesList);
                    ShowSuccessMessagePanel("保存成功。");
                } else {
                    for (let i = 0; i < data.ErrRowNo.length; i++) {
                        $('#tabData11 tbody').find("tr").each(function () {
                            if (parseInt($(this).find("td").eq(2).text()) === parseInt(data.ErrRowNo[i])) {
                                $(this).find('td').eq(6).addClass("error");
                                $(this).find('td').eq(6).attr('title', "料号有错误或未审核的材料。");
                            }
                        });
                    }
                    ShowErrorMessagePanel("料号有错误或未审核的材料。");
                }
            }
        });
    }
    // 删除行
    DoDeleteLines($self) {
        // 为了防止在增加材料时之前修改过的内容丢失，所以要首先保存一下
        if ($('#tabData11 tbody tr').find("td.dirty").length > 0 || $('#tabData12 tbody tr').find("td.dirty").length > 0) {
            showModal(370, 140, '系统信息', '', null, null, 1, "数据有更新，是否需要保存？", () => {
                this.SaveLines();
            }, () => {
                this.OnDeleteLines($self);
            });
        } else {
            this.OnDeleteLines($self);
        }
    }
    OnDeleteLines($self) {
        let params = {};
        params['HeaderId'] = parseInt($("#HeaderId").val());
        params['LinesId'] = $self.parent().parent().attr("_mash_id");
        params['DeletedBy'] = $.trim($("#UserId").val());
        params['LinesData'] = "款号：" + $("#StyleNo").val() +
                "　料号：" + $self.parent().parent().find("td").eq(6).text() +
                "　使用部位：" + $self.parent().parent().find("td").eq(5).text();
        this.DeleteLines(params, "/tech/cost_forecast/lines/delete.html", function (data, _this) {
            if (data.LinesList !== undefined) {
                // 刷新明细
                _this.BuildDataTable(data.LinesList);
            }
            ShowSuccessMessagePanel("删除成功。");
        });
    }
    // 批量删除
    DoBatchDeleteLines() {
        if ($("input[type='checkbox'][name='_check_row']:checked").length <= 0) {
            ShowErrorMessagePanel("请选择要删除的数据。");
            return false;
        }

        this.BatchDeleteLines('/tech/cost_forecast/lines/batch_delete.html', function (data, $self) {
            // 刷新明细
            $self.BuildDataTable(data);
            $("#CheckAll").prop("checked", false);
            ShowSuccessMessagePanel("批量删除完成。");
        });
    }
    // 增加明细
    NewLines() {
        // 为了防止在增加材料时之前修改过的内容丢失，所以要首先保存一下
        if ($('#tabData11 tbody tr').find("td.dirty").length > 0 || $('#tabData12 tbody tr').find("td.dirty").length > 0) {
            showModal(370, 140, '系统信息', '', null, null, 1, "数据有更新，是否需要保存？", () => {
                this.SaveLines();
            }, () => {
                this.DoInsertMaterial();
            });
        } else {
            this.DoInsertMaterial();
        }
    }
    DoInsertMaterial() {
        let _choice = new CommonChoice();
        _choice.DoChoiceMaterial(1, '选择材料', (data) => {
            if (data) {
                let new_lines = [];
                for (let i = 0; i < data.length; i++) {
                    let item = {};
                    item['headerId'] = parseInt($("#HeaderId").val());
                    item['materialId'] = parseInt(data[i].materialId);
                    item['createdBy'] = parseInt($.trim($("#UserId").val()));
                    item['updatedBy'] = parseInt($.trim($("#UserId").val()));
                    if ($("#tabData11 tbody tr.row__clicked").length) {
                        // 得到当前选择行的序号，为了插入新行做准备
                        item['orderNo'] = parseInt($("#tabData11 tbody tr.row__clicked").find('td').eq(2).text());
                    } else {
                        item['orderNo'] = null;
                    }

                    new_lines.push(item);
                }
                // 根据所选材料，增加明细表记录
                super.DoAjax(new_lines, "/tech/cost_forecast/lines/insert.html", function (data, _this) {
                    if (data !== null) {
                        _this.BuildDataTable(data);
                        ShowSuccessMessagePanel("材料增加完成。");
                    }
                });
            }
        });
    }
    // 批量选择的数据(类中data:this.GetCheckedLinesData)
    GetCheckedLinesData() {
        let choiced_data = [];
        if ($("input[type='checkbox'][name='_check_row']:checked").length > 0) {
            $("input[type='checkbox'][name='_check_row']:checked").each(function () {
                let item = {};
                item['headerId'] = $("#HeaderId").val();
                item['linesId'] = $(this).parent().parent().parent().attr("_mash_id");
                item['deletedBy'] = $.trim($("#UserId").val());
                choiced_data.push(item);
            });
        }
        return JSON.stringify(choiced_data);
    }
    // 通过选择的行得到料号，然后弹出材料选择窗口供选择类似的材料（用料号前8位作为条件）
    DoUpdateRowByMaterialCode() {
        if ($("tr.row__clicked").length > 0) {
            let _choice = new CommonChoice();
            _choice.DoChoiceMaterial('0&materialCode=' + $("#tabData11 tr.row__clicked td").eq(6).text(), '选择材料', (data) => {
                if (data) {
                    let $tr1 = $("#tabData11 tr.row__clicked");
                    let $tr2 = $("#tabData12 tbody tr").eq($tr1.index());
                    let _materialId = data[0];

                    showModal(350, 140, '确认', '', null, null, 1, '请问，确定要改变当前材料吗？', () => {
                        this.OnUpdateRowByMaterialId($tr1.attr("_mash_id"), _materialId);
                    });
                }
            });
        } else {
            ShowErrorMessagePanel('请选择要更改的明细数据行。');
        }
    }
    //更改当前行材料
    OnUpdateRowByMaterialId(linesId, materialId) {
        let criterion = {};
        criterion['HeaderId'] = parseInt($("#HeaderId").val());
        criterion['LinesId'] = linesId;
        criterion['MaterialId'] = materialId;
        criterion['UpdatedBy'] = parseInt($("#UserId").val());
        super.DoAjax(criterion, "/tech/cost_forecast/lines/updateLinesByMaterialId.html", function (data, $self) {
            let $tr1 = $("#tabData11 tr.row__clicked");
            let $tr2 = $("#tabData12 tr.row__clicked");
            if (data.Success) {
                $tr1.attr("_mash_material_id", data.MaterialId);
                $tr1.find("td").eq(3).text(data.MaterialName);    // 料名
                $tr1.find("td").eq(6).text(data.MaterialCode);
                $tr1.find("td").eq(7).text(data.Specification);   // 规格
                $tr1.find("td").eq(4).text(data.SupplierName);    // 供应商
                $tr2.find("td").eq(8).attr("_uomId", data.UomId); // 计量单位标识
                $tr2.find("td").eq(8).text(data.UomName);         // 计量单位名
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(6).removeClass("dirty");
                }
                ShowSuccessMessagePanel("材料改变成功。");
            } else {
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(6).removeClass("dirty");
                }
                $tr1.find("td").eq(6).text($tr1.find("td").eq(6).attr("_old_val"));  // 这个等于撤销功能
                ShowErrorMessagePanel("料号输入错误。");
            }
        });
    }
    // 引入相近的成本预测 
    ImportLinesFromOtherCostForcastLines() {
        let _choice = new CommonChoice();
        _choice.DoChoiceCostForecast(0, '引入成本预测明细', (data) => {
            if (data) {
                let item = {};
                item['HeaderId'] = parseInt($("#HeaderId").val());
                item['ImportedHeaderId'] = parseInt(data[0]);
                //     item['MaxOrderNo'] = parseInt($.trim($("#tabData11 tr:last").find("td").eq(2).text()) === '' ? 0 : $.trim($("#tabData11 tr:last").find("td").eq(2).text()));
                item['CreatedBy'] = parseInt($.trim($("#UserId").val()));
                item['UpdatedBy'] = parseInt($.trim($("#UserId").val()));
                super.DoAjax(item, "/tech/cost_forecast/lines/importLinesFromOther.html", (data, _this) => {
                    if (data !== null) {
                        // 显示明细数据
                        _this.BuildDataTable(data.LinesList);
                        ShowSuccessMessagePanel('引入完成。');
                    }
                });
            }
        });
    }
    //复制行
    CopyRow() {
        if ($("#tabData11 tr.row__clicked").length > 0) {
            //先清空
            this.clipboard.splice(0, this.clipboard.length);
            let $tr1 = $("#tabData11 tbody tr.row__clicked");
            let $tr2 = $("#tabData12 tbody tr").eq($tr1.index());

            this.clipboard.push($tr1.attr("_mash_id"));
            this.clipboard.push($tr1.attr("_mash_material_id"));
            this.clipboard.push($.trim($tr1.find('td').eq(7).text()));               // 规格
            this.clipboard.push($.trim($tr1.find('td').eq(8).attr("_mash_uom_id"))); // 计量单位

            ShowSuccessMessagePanel('已经拷贝当前选择的数据到剪切板。');
        } else {
            ShowErrorMessagePanel('请选择要拷贝的明细数据行。');
        }
    }
    //粘贴行
    PosteRow() {
        if (this.clipboard === null || this.clipboard.length === 0) {
            ShowErrorMessagePanel('剪切板没有数据。');
            return false;
        }
        let item = {};
        item['HeaderId'] = parseInt($("#HeaderId").val());
        item['CopiedLinesId'] = this.clipboard[0];
        item['MaterialId'] = parseInt(this.clipboard[1]);
        item['Specification'] = formatNullInputValue(this.clipboard[2]);
        item['UomId'] = parseInt(this.clipboard[3]);
        item['CreatedBy'] = parseInt($.trim($("#UserId").val()));
        item['UpdatedBy'] = parseInt($.trim($("#UserId").val()));
        if ($("#tabData11 tbody tr.row__clicked").length) {
            item['OrderNo'] = parseInt($("#tabData11 tbody tr.row__clicked").find('td').eq(2).text());
        } else {
            item['OrderNo'] = null;
        }

        // 粘贴数据
        super.DoAjax(item, "/tech/cost_forecast/lines/paste.html", function (data, $self) {
            if (data !== null) {
                // 刷新明细记录                       
                $self.BuildDataTable(data);
                ShowSuccessMessagePanel('粘贴数据完成。');
            }
        });
    }
    // 选择采购类型（备料来源）
    DoChoiceMaterialPreParedType($input) {
        this.$input = $input;
        let _choice = new CommonChoice();
        _choice.DoChoiceMaterialPreParedType(0, "选择备料来源", (data) => {
            if (data === false) {
                this.$input.focus();
            } else {
                this.$input.parent().attr("_mash_type_id", data[0]);
                this.$input.val(data[1]);
                this.$input.focus();
            }
        });
    }
    // 设置行选择后的状态
    SetRowStatus($self) {
        super.AdjustRowStatus($self, function ($row, index) {
            $('#tabData12 tbody tr:eq(' + index + ')').addClass("row__selected");
            // 设置删除按钮失效
            $row.children('td').eq(1).children('span').eq(0).attr("onclick", "");
        }, function ($row, index) {
            $('#tabData12 tbody tr:eq(' + index + ')').removeClass("row__selected");
            // 设置删除按钮有效
            let _event_delete_onclick = '_InstancePageLines.DeleteLines($(this))';
            $row.children('td').eq(1).children('span').eq(0).attr("onclick", _event_delete_onclick);
        });
    }
    AutoAdjustTableHeightForLines() {
        let h = $(window).height();
        //let _tabTop = 421;  // 高度 = $("#divH11").offset().top + 53
        let _tabTop = $("#divH11").offset().top + 53;   // 用于随着窗口变化，下面明细高度随之变化的一个节点
        let _rc = Math.floor((h - _tabTop - 25) / 25);
        let _dh = _rc * 25 + 17;
        let _rowH = this.rows * 25 + 17; // 计算行高
        _dh = (_rowH >= _dh) ? _dh : _rowH;

        $("#divD11").css({"max-height": _dh - 17, height: _dh - 17});
        $("#divD12").css({"max-height": _dh + 1, height: _dh + 1});
    }
    ScrollTo() {
        $('#divH12').scrollLeft($('#divD12').scrollLeft());
        $('#divD11').scrollTop($('#divD12').scrollTop());
    }
    // 清除料号错误
    ClearGridMaterialNoError() {
        $('#tabData11 tbody').find("tr").each(function (index) {
            $(this).find('td').eq(6).attr('title', '');
            $(this).find('td').eq(6).removeClass("error");
        });
    }
}

class MyPagePicture extends BaseEditPicture {
    constructor() {
        super();
        this.saveUrl = "/tech/cost_forecast/picture/save.html";
        this.delUrl = "/tech/cost_forecast/picture/delete.html";
        this.fileId = $("#HeaderId").val();
        this.$picList = $("#ProductPictureList");
        this.altStr = "产品图片";
    }
}

var _InstancePageHeader = null;
var _InstancePageLines = null;
var _InstancePagePicture = null;

//-----------------------------------------------------------------------------
// 页面初始化
//-----------------------------------------------------------------------------
function onPageReady() {
    let _pageStatus = parseInt($("#Action").val());
    let _dataId = $("#HeaderId").val();

    let cost_forecast_list_result = $.cookie("cost_forecast_list_result") === undefined ? "" : $.cookie("cost_forecast_list_result");
    let _pageListData = [];
    if (cost_forecast_list_result !== "") {
        _pageListData = cost_forecast_list_result.split(',');
        $("#rec_total_rows").text(_pageListData.length);
        $("#rec_cur_row").text($.inArray(_dataId, _pageListData) + 1);

        if (_pageListData.length > 0) {
            let index = $.inArray(_dataId, _pageListData);
            if (index === 0) {
                $("#ButPrev").attr("disabled", "disabled");
            } else {
                $("#ButNext").removeAttr("disabled");
            }
            if (index === (_pageListData.length - 1)) {
                $("#ButNext").attr("disabled", "disabled");
            } else {
                $("#ButPrev").removeAttr("disabled");
            }
        }
    } else {
        $("#rec_total_rows").text("1");
        $("#rec_cur_row").text("1");
    }
    _InstancePageHeader = new MyPageHeader(_dataId, 0, 0, _pageStatus, _pageListData,
            "/tech/cost_forecast/list.html",
            "/tech/cost_forecast/fetchByKey.html",
            "/tech/cost_forecast/header/insert.html",
            "/tech/cost_forecast/export.html",
            "/printPreview/tech/cost_forecast/printPreview1.html");

    _InstancePageLines = new MyPageLines();
    _InstancePagePicture = new MyPagePicture();

    $("#tabPanelHeader").wxTabs({tabContent: "tabPanelData"});
    window.laydate.render({
        elem: '#DateOfFilling',
        theme: '#393D49',
        trigger: 'click'
    });

    $("#hPanelSplitter").click(function () {
        if ($(this).children("i").hasClass("fa-angle-double-up")) {
            _InstancePageHeader.Collapse();
        } else {
            _InstancePageHeader.Expand();
        }
    });

    _InstancePageHeader.OnPageLoad();
}

// 画面大小或者位置移动
function onPageResize() {
    let wLeftList = 878; //左边列表固定宽度
    let w = $(window).width();

    $("#divH12").css({width: w - 16 - wLeftList - 17});
    $("#divD12").css({left: -1, width: w - wLeftList - 15});

    if (_InstancePageLines !== null)
        _InstancePageLines.AutoAdjustTableHeightForLines();
}

//-----------------------------------------------------------------------------
// 验证函数
//-----------------------------------------------------------------------------
$.validator.setDefaults({
    ignore: 'hidden, [reaonly=readonly]'
});
$(function () {
    $("#form_data").validate({
        // Step 1：设置验证规则和错误消息
        rules: {
            _BillNo: "required",
            _PerColourQuantity: "required"
        },
        messages: {
            _BillNo: "请填写单据号。",
            _PerColourQuantity: "请填写每色数量。"
        },
        // Step 2：设置验证触发事件
        onclick: false,
        onfocusout: false,
        onfocusin: false,
        onkeyup: false,
        onkeydown: false,
        focusInvalid: false,
        // Step 3：设置错误信息提示
        showErrors: window.showErrors  //使用自定义的错误显示方法
    });
});

// 验证输入
function CheckGridInput() {
    $('#tabData11 tbody').find("tr").each(function (index) {
        let $tr1 = $('#tabData11 tbody').find("tr").eq(index);
        let _orderno = $.trim($tr1.find('td').eq(2).text()).length > 0 ? $.trim($tr1.find('td').eq(2).text()) : 0; // 序号
        let _materialcode = $.trim($tr1.find('td').eq(6).text());
        let _materialid = $tr1.attr("_mash_material_id");
        if (parseInt(_materialid) >= 0) {    //过滤掉包装费合计行等
            if (_orderno !== 0) {
                if (!isNumber(_orderno)) {
                    GridCheckErrHandle($tr1, 2, '请输入正确的数字。');
                } else {
                    GridCheckSuccessHandle($tr1, 2);
                }
            }

            if (_materialcode === "") {
                GridCheckErrHandle($tr1, 6, '请输入材料号。');
            } else {
                GridCheckSuccessHandle($tr1, 6);
            }
        }
    });

    if ($('#tabData11 tbody').find('td.error').length > 0 || $('#tabData12 tbody').find('td.error').length > 0) {
        ShowErrorMessagePanel('对不起，填写的数据有错误。');
        return false;
    } else {
        return true;
    }
}
function GridCheckErrHandle($row, index, errMsg) {
    $row.find('td').eq(index).addClass("error");
    $row.find('td').eq(index).attr('title', errMsg);
}
function GridCheckSuccessHandle($row, index) {
    $row.find('td').eq(index).removeClass("error");
    $row.find('td').eq(index).attr('title', '');
}